home *** CD-ROM | disk | FTP | other *** search
- """Demonstration of the Remote View protocol for adding
- specially implemented Views in an application."""
- from gadfly import gadfly
-
- # create the database
- g = gadfly()
- g.startup("dbtest", "dbtest") # assume directory "dbtest" exists
-
- # define a remote view class
- import gfintrospect
-
- class myTable(gfintrospect.RemoteView):
-
- """A remote view must define self.column_names
- to return a (fixed) list of string column names and
- self.listing() to return a possibly varying
- list of row values. If there is a single column
- the listing() list must return a list of values,
- but for multiple columns it must return a list
- of tuples with one entry for each column.
-
- The remote view implementation may optionally
- redefine __init__ also, please see gfintrospect.py
- """
-
- # static: don't reconstruct internal structure for each query
- # for more interesting views static will generally be 0
- static = 1
-
- def __init__(self, column_names=None, rowlist=None):
- """do whatever needed for initialization"""
- if column_names is None:
- column_names = ['a', 'b', 'c']
- if rowlist is None:
- rowlist = [(1,2,3), (4,5,6), (7,8,9)]
- self.column_names = column_names
- self.rowlist = rowlist
-
- def listing(self):
- """return list of tuples of right sizes to match column_names.
- for more interesting views this will do something more
- complex ;).
- """
- return self.rowlist
-
- # create a table using default cols and rows
- ### Python code adding ANY remote views must be EXECUTED
- ### EACH TIME THE DATABASE LOADS!
-
- g.add_remote_view("test", myTable())
-
- # create a table using specified cols and rows
- # NOTE: for single column give list of values
- # NOT list of tuples of values!
- g.add_remote_view("test2", myTable(["x"], [1,6,7]))
-
- print g.database
-
- c = g.cursor()
-
- c.execute("select * from test")
- print "test::"
- print c.pp()
- print
- c.execute("select * from test2")
- print "test2::"
- print c.pp()
- print
- c.execute("select * from test, test2 where x=a")
- print "join"
- print c.pp()
- print
-
- g.add_remote_view("test3", myTable(["z", "w"], [(2,3), (7,8), (4,6)]))
- c.execute("select * from test3")
- print "test3::"
- print c.pp()
- print
-
- c.execute(
- "select * from test, test2, test3 where x=a and z=b and w=c")
- print "join 2::"
- print c.pp()
- print
-
-